基于Hu距的图像旋转矫正之OpenCV实现 您所在的位置:网站首页 Opencv 轮廓 仿射变换 基于Hu距的图像旋转矫正之OpenCV实现

基于Hu距的图像旋转矫正之OpenCV实现

2023-10-28 17:03| 来源: 网络整理| 查看: 265

目录

1、常见图像旋转矫正方法

1.1 基于图像边缘轮廓的旋转矫正

1.2 基于傅里叶变换以及霍夫直线检测的旋转矫正

2、基于Hu距图像旋转矫正

2.1 Hu旋转不变性

2.2 实现步骤

2.2.1 分别计算图像二阶距

 2.2.2 利用得到的二阶距计算图像偏转角度

2.2.3 利用仿射变换对图像进行旋转矫正

2.4 程序实现

2.5 旋转矫正效果验证

系统环境 Windows 10 64 位 + OpenCV 3.4.1 64 位

1、常见图像旋转矫正方法

常见的图像旋转矫正方式有:基于图像边缘轮廓的旋转矫正和基于傅里叶变换以及霍夫直线检测的旋转矫正两种方法。

1.1 基于图像边缘轮廓的旋转矫正

1)图像灰度化

2)阈值二值化

3)检测轮廓

4)提取轮廓的包围矩阵(图像前景掩膜)

5)通过提取的包围矩阵获取偏转角度

6)利用仿射变换对图像进行偏转

具体实现参考:OpenCV探索之路(十六):图像矫正技术深入探讨

1.2 基于傅里叶变换以及霍夫直线检测的旋转矫正

1)利用DTF变换计算图像的频谱图

2)频谱中心移动

3)对移动后的频谱图进行二值分割

4)利用霍夫直线检测计算图像倾斜角度

5)利用仿射变换对图像进行旋转矫正

具体实现参考:OpenCV实现基于傅里叶变换的旋转文本校正

傅里叶变换的原理解析参考:傅里叶分析之掐死教程(完整版)和OpenCV图像的傅里叶变换-(补番)

2、基于Hu距图像旋转矫正

除了以上两种方式可以实现图像旋转矫正外,还可以利用 Hu 距旋转不变性对图像进行旋转矫正。

2.1 Hu旋转不变性

图片经过任意角度旋转、任意比例缩放Hu矩都保持不变,即图像Hu 矩的平移、旋转不变性。Hu旋转不变性详情参考:图像不变性特征—hu矩、图像特征_图像矩(Hu矩)。七个不变矩由二阶和三阶中心矩的线性组合构成,具体表达式如下:

在实际应用中,在对图片中物体进行处理时,只有 M1 和 M2 体现良好的不变性,其余的几个不变矩产生的误差比较大。因此,认为只有基于二阶矩的不变矩对二维物体的描述具有良好的旋转、缩放和平移不变性(M1和 M2 由二阶矩组成)。

图像的二阶矩表示图像的主轴,二阶矩值的大小可以确定图像的长轴和短轴,以此来计算轴的方向角度。最后,用主轴相对于法线轴的逆时针旋转角度来近似图像的旋转方向。

2.2 实现步骤 2.2.1 分别计算图像二阶距\rho _{11}\rho _{12}\rho _{22}

其中,I(x,y)表示图像在点(x,y)处的灰度值,c_{x},c_{y}表示图像的质心坐标。

 2.2.2 利用得到的二阶距计算图像偏转角度

2.2.3 利用仿射变换对图像进行旋转矫正 2.4 程序实现 #include #include #include #include using namespace std; using namespace cv; //计算图像质心坐标 bool calCentroid(Mat srcImg, int width, int height, int *x, int *y) { if (srcImg.empty()) { return false; } int i, j; long long m00 = 0, m10 = 0, m01 = 0; for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { uchar tmp = srcImg.at(i, j); m00 += tmp; m10 += tmp * j; m01 += tmp * i; } } if (m00 != 0) { *x = m10 / m00; *y = m01 / m00; //cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有